package com.example.ssoserver.controller;

import com.example.ssoserver.utils.RedisUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import javax.servlet.http.HttpSession;
import java.util.UUID;

@Controller
@RequestMapping
public class SsoLoginController {
    @Autowired
    private RedisUtils redisUtils;

    //跳转到登录页面
    @GetMapping("/login")
    public String login() {
        //直接请求登录页面,记录哪个系统跳转过来的地址
        return "login";
    }

    /**
     * 登录操作
     *
     * @return
     */
    @PostMapping("/login")
    public String loginSubmit(String userName, String password, String redirectUrl, HttpSession session, Model model, RedirectAttributes attributes) {
        //判断输入的用户名和密码是否正确
        if ("testuser1".equals(userName) && "123456".equals(password)) {  //用户信息正确
            //如果正确则执行以下步骤
            //1.创建token
            String token = UUID.randomUUID().toString();
            System.out.println("token创建成功");
            //2.创建全局会话 session
            session.setAttribute("token", token);
            //3.将token持久化
            redisUtils.set("token", token);
            //4.返回token，哪里来跳转到哪里去
            attributes.addAttribute("token", token);
            return "redirect:" + redirectUrl;
        }

        //如果错误，跳转到登录页面，并提示错误信息
        model.addAttribute("redirectUrl", redirectUrl);
        return "login";
    }

   /* public String weChartlogin(){
        //验证用户信息
        //如果正确  创建全局会话，持久化当前token
    }*/
    /**
     * 检查用户是否登录的操作
     *
     * @return
     */
    @RequestMapping("/checkLogin")
    public String checkLogin(HttpSession session, String redirectUrl, Model model, RedirectAttributes attributes) {
        //根据token判断当前用户是否有全局会话
        String token = (String) session.getAttribute("token");
        //如果为空，则跳转到认证中心的登录页面，进行登录
        if (StringUtils.isEmpty(token)) {
            model.addAttribute("redirectUrl", redirectUrl);
            return "login";
        } else {  //如果不为空，则将token作为参数返回至跳转来的页面，表示认证通过
            attributes.addAttribute("token", token);
            return "redirect:" + redirectUrl;
        }


    }


    /**
     * 验证token是否正确
     *
     * @return
     */
    @RequestMapping("/verify")
    @ResponseBody
    public String verify(String token) {
        //根据token获取数据库中是否存在该token
        //如果存在，返回true，表示验证成功
        return "true";
    }

    /**
     * 根据token获取用户信息
     *
     * @param token
     * @return
     */
    @RequestMapping("getUserInfo")
    @ResponseBody
    public String getUserInfo(String token) {
        //根据token获取用户信息

        return null;
    }
}
